package com.bookrecomm.controller;

import com.bookrecomm.dto.UserLoginDTO;
import com.bookrecomm.dto.UserRegisterDTO;
import com.bookrecomm.service.UserService;
import com.bookrecomm.vo.ResultVO;
import com.bookrecomm.vo.UserVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

/**
 * 用户认证控制器
 * 处理用户注册、登录等认证相关请求
 */
@RestController
@RequestMapping("/auth")
public class AuthController {

    @Autowired
    private UserService userService;

    /**
     * 用户注册
     * @param registerDTO 注册信息
     * @return 注册结果
     */
    @PostMapping("/register")
    public ResultVO<UserVO> register(@Valid @RequestBody UserRegisterDTO registerDTO) {
        UserVO userVO = userService.register(registerDTO);
        return ResultVO.success("注册成功", userVO);
    }

    /**
     * 用户登录
     * @param loginDTO 登录信息
     * @return 登录结果（包含JWT令牌）
     */
    @PostMapping("/login")
    public ResultVO<UserVO> login(@Valid @RequestBody UserLoginDTO loginDTO) {
        UserVO userVO = userService.login(loginDTO);
        return ResultVO.success("登录成功", userVO);
    }

    /**
     * 检查用户名是否已存在
     * @param username 用户名
     * @return 检查结果
     */
    @GetMapping("/check/username")
    public ResultVO<Boolean> checkUsername(@RequestParam String username) {
        boolean exists = userService.existsByUsername(username);
        return ResultVO.success("检查完成", exists);
    }

    /**
     * 检查邮箱是否已存在
     * @param email 邮箱
     * @return 检查结果
     */
    @GetMapping("/check/email")
    public ResultVO<Boolean> checkEmail(@RequestParam String email) {
        boolean exists = userService.existsByEmail(email);
        return ResultVO.success("检查完成", exists);
    }

    /**
     * 检查手机号是否已存在
     * @param phone 手机号
     * @return 检查结果
     */
    @GetMapping("/check/phone")
    public ResultVO<Boolean> checkPhone(@RequestParam String phone) {
        boolean exists = userService.existsByPhone(phone);
        return ResultVO.success("检查完成", exists);
    }

    /**
     * 获取当前登录用户信息
     * @return 用户信息
     */
    @GetMapping("/me")
    public ResultVO<UserVO> getCurrentUser() {
        UserVO userVO = userService.getCurrentUser();
        return ResultVO.success("获取成功", userVO);
    }
}
